//package com.bw.coupon.annotabon;
//
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.scheduling.annotation.AsyncResult;
//
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//import java.util.concurrent.Future;
//
//
///**
// * @Author：尚志豪
// * @Package：com.bw.coupon.annotabon
// * @Project：doudi-group-practical_training-02
// * @name：RabbitMQConfig
// * @Date：2025/1/23 16:45
// */
//@Configuration
//public class RabbitMQConfig {
//
//    // 模拟库存检查
//    @Async
//    // 异步执行任务：当某个方法的执行时间较长（如 I/O 操作、网络请求等）时，使用 @Async 注解可以让该方法在后台独立线程中执行，而不阻塞主线程，从而提升系统的响应能力和用户体验。
//    // 并发处理多个任务：如果一个操作中有多个耗时任务需要并行执行，可以使用 @Async 将它们拆分成多个线程，减少总的处理时间。
//    // 使用场景 (I/O 密集型任务, 长时间运行的计算任务, 定时任务和后台处理, 批量处理操作, 非阻塞的用户交互)
//    public Future<String> checkInventory(String orderId) {
//        try {
//            Thread.sleep(2000); // 模拟库存检查
//            System.out.println("库存检查完成：" + orderId);
//            return new AsyncResult<>("库存检查通过");
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//            return new AsyncResult<>("库存检查失败");
//        }
//    }
//
//    // 模拟支付处理
//    @Async
//    public Future<String> processPayment(String orderId) {
//        try {
//            Thread.sleep(3000); // 模拟支付处理
//            System.out.println("支付处理完成：" + orderId);
//            return new AsyncResult<>("支付成功");
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//            return new AsyncResult<>("支付失败");
//        }
//    }
//
//    // 处理整个订单的异步流程
//    public void processOrder(String orderId) {
//        try {
//            // 异步检查库存和支付
//            Future<String> inventoryCheck = checkInventory(orderId);
//            Future<String> paymentProcessing = processPayment(orderId);
//
//            // 等待库存检查和支付处理完成
//            String inventoryResult = inventoryCheck.get();
//            String paymentResult = paymentProcessing.get();
//
//            if ("库存检查通过".equals(inventoryResult) && "支付成功".equals(paymentResult)) {
//                System.out.println("订单处理成功：" + orderId);
//            } else {
//                System.out.println("订单处理失败：" + orderId);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            System.out.println("订单处理失败：" + orderId);
//        }
//    }
//
//    private ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建一个线程池
//    //监听 RabbitMQ 消息，接收下单请求
//    @RabbitListener(queues = "orderQueue") // 监听订单队列
//    public void handleOrder(String orderId) {
//        System.out.println("接收到订单请求：" + orderId);
//        executorService.submit(() -> processOrder(orderId)); // 使用线程池异步处理订单
//    }
//}
